package var;

//Java数据类型分为 基本数据类型 和引用数据类型
/*
    1.基本数据类型
    数值型：整数类型，存放整数(byte[1],short[2],int[4],long[8])
        浮点(小数)类型(float[4],double[8])
    字符型：char[2]，存放单个字符 'a'
    布尔型：boolean[1]，存放true,false

    2.引用数据类型
    类(class)
    接口(interface)
    数组([])
 */

public class IntDetail {
    public static void main(String[] args) {
        // Java的整型常量默认为 int 型，声明 long 型常量后必须加 ‘l’ 或 'L'
        int n1 = 1; //4字节
//        int n2 = 1L; // long占8字节，类型转换失败
        long n3 = 1L;
    }
}

class FloatDetail {
    public static void main(String[] args) {
        // Java的浮点型常量默认为double型,声明float型常量,后面必须加 'f' 或 'F'
//        float num1 = 1.1;//no
        float num2 = 1.1F;
        double num3 = 1.1;
        double num4 = 1.1f; //double占8字节,float占4字节,类型转换成功;

        // 十进制数形式：如：5.12 512.0f .512 (必须有小数点）
        double num5 = .123; //等价 0.123
        System.out.println(num5);

        // 科学计数法形式:如：5.12e2 [5.12 * 10 的 2 次方 ] 5.12E-2 []
        System.out.println(5.12e2);//512.0
        System.out.println(5.12E-2);//0.0512

        // 通常情况下，应该使用 double 型，因为它比 float 型更精确。
        // [举例说明]double num9 = 2.1234567851;float num10 = 2.1234567851F;
        double num9 = 2.1234567851;
        float num10 = 2.1234567851F;
        System.out.println(num9);
        System.out.println(num10);

        // 浮点数使用陷阱: 2.7 和 8.1 / 3 比较
        // 看看一段代码
        double num11 = 2.7;
        double num12 = 8.1 / 3; // 8.1 / 3; // 2.7
        System.out.println(num11);// 2.7
        System.out.println(num12);// 接近 2.7 的一个小数，而不是 2.7
        // 得到一个重要的使用点: 当我们对运算结果是小数的进行相等判断是，要小心
        // 应该是以两个数的差值的绝对值，在某个精度范围类判断
        if( num11 == num12) {
            System.out.println("num11 == num12 相等");
        }
        //正确比较
        if (Math.abs(num11 - num12) < 0.0000001) {
            System.out.println("差值非常小，到我的规定精度，认为相等...");
        }

        // 若是直接查询或直接赋值得到的小数, 可以直接判断相等, 而通过运算得到则需要借助API
    }
}

class CharDetail {
    public static void main(String[] args) {
        // char的本质是一个整数, 在默认输出时是unicode码对应的字符
        char c1 = 97;
        System.out.println(c1);// a

        // 要输出字符对应的数字,可以(int)进行类型转换
        char c2 = 'a';
        System.out.println((int)c2);// 97
        char c3 = '刘';
        System.out.println((int)c3);// 21016

        //char 类型是可以进行运算的，相当于一个整数，因为它都对应有 Unicode 码
        System.out.println('a' + 10);// 107

        char c5 = 'b' + 1;// 98+1 ==> 99
        System.out.println((int)c5);// 99
        System.out.println(c5);// 99->对应的字符->编码表 ASCII(规定好的)=>c
    }
}

class BooleanDetail {
    public static void main(String[] args) {
        // 演示判断成绩是否通过的案例
        // 定义一个布尔变量
        boolean isPass = true;
        if(isPass) {
            System.out.println("考试通过，恭喜");
        } else {
            System.out.println("考试没有通过，下次努力");
        }
    }
}